package com.eve.common.util;

/**
* @author HXL
* @version 创建时间：2020年3月24日 
*  
*/
public class CompareUtils {

	/**
	 * 1.code大,name小-》不合理
	 * 2.code小,name大-》不合理
	 * 3.code大,name大-》大
	 * 4.code小,name小-》小
	 */
	public enum CompareResult{
		/**
		 * 1 code大,name大-》大
		 */
		all_large(1),
		/**
		 * 0 code小,name小-》小
		 */
		all_less(0),
		/**
		 * -1 code大,name小-》不合理
	     *    code小,name大-》不合理
		 */
		un_suit(-1);
		
		private int value;
		CompareResult(int value) {
			this.value = value;
		}
		public int getValue() {
			return value;
		}
		
	}
	
	/**
     * 比较当前版本号是否大于原始的版本信息
     * 只当code大，name也大时才合理
     * @param currentCode 当前版本号
     * @param currentName 当前版本信息
     * @param oldCode     原始版本号
     * @param oldName     原始版本信息
     */
    public static int compareIsLarge(int currentCode, String currentVersionName,
    		int oldCode, String oldVersionName) {
    	boolean compareNameIsLarge = CompareUtils.compareNameIsLarge(currentVersionName, oldVersionName);   	
    	// 1.同时大才是大
    	if((currentCode >= oldCode) && compareNameIsLarge) {
    		return CompareResult.all_large.getValue();
    	}
    	// 2.同时小才是小
    	if((currentCode <= oldCode) && !compareNameIsLarge) {
    		return CompareResult.all_less.getValue();
    	}
    	return CompareResult.un_suit.getValue();
    }
    /**
     * 比较当前版本号是否大于原始的版本信息
     * @param currentName 当前版本信息
     * @param oldName     原始版本信息
     */
    public static boolean compareNameIsLarge(String currentVersionName, String oldVersionName) {
    	String[] currentName = currentVersionName.split("\\.");
    	String[] oldName = oldVersionName.split("\\.");
    	String currentName0 = currentName[0];
    	String currentName1 = currentName[1];
    	String currentName2 = currentName[2];
    	String currentName3 = currentName[3];
    	String oldName0 = oldName[0];
    	String oldName1 = oldName[1];
    	String oldName2 = oldName[2];
    	String oldName3 = oldName[3];  	
    	if(currentName0.compareTo(oldName0) < 0) {
    		return false;
    	}
    	if(currentName0.compareTo(oldName0) == 0) {
    		if(currentName1.compareTo(oldName1) < 0) {
    			return false;
    		}
    		if(currentName1.compareTo(oldName1) == 0) {
    			if(currentName2.compareTo(oldName2) < 0) {
    				return false;
    			}
    			if(currentName2.compareTo(oldName2) == 0) {
    				if(currentName3.compareTo(oldName3) <= 0) {
    					return false;
    				}
    			}
    		}
    	}
    	return true;
    }
//    @Test
    public void test() {
    	String a1 = "1.1.0.0";
    	int a0 = 102;
    	int b0 = 101;
    	String b1 = "1.1.0.1";
    	int compareIsLess = CompareUtils.compareIsLarge(b0, b1, a0, a1);
    	System.out.println(compareIsLess);
    	
    }
}
